# coding:utf-8
# Project:pyinterface
# author:wj
# time:2022/12/30 17:49
# Email:1305137785@qq.com
from tool.handle_replace import HandleReplace
from tool.handle_mysql import MysqlHandle
from loguru import logger
import allure
class HandleAssertDb:
    def __init__(self):
        self.handle_replace = HandleReplace()
    @allure.step('数据库断言')
    def assert_db(self,assert_db):
        print('打印数据库断言{}'.format(assert_db))
        try:
            if assert_db:
               '''
               数据库断言思路：
               1、excel测试用例里新增一个字段用来存放数据库断言的
               2、数据格式是期望结果，实际结果是查询的数据库sql语句
               3、其中sql语句中的值是从response或者脚本生成的变量，我们要特殊处理给他替换掉
               4、sql替换后转成字典的格式
               5、执行sql语句，判断执行sql得出的结果与测试用例里的预期结果是否一zhi，若一致则断言成功
               '''
               # 替换sql变量
               myassert_db = self.handle_replace.replace_sql(assert_db)
               # 获取实际结果
               actul_result = MysqlHandle(myassert_db['database_name']).get_data(sql=myassert_db['actual_data'])[0]
               assert myassert_db['expect_data'] == str(actul_result)
               logger.info(f"数据库断言的预期结果是：{myassert_db['expect_data']}")
               logger.info(f"数据库断言的实际结果是：{actul_result}")
               allure.attach(body=f"{myassert_db['expect_data']}",name=f"断言的预期结果：{myassert_db['expect_data']}")
               allure.attach(body=f"{actul_result}", name=f"断言的实际结果：{actul_result}")
               print('数据库断言成功')
            else:
                logger.info('测试用例，数据库断言为空，不需要数据库断言')
                allure.attach(body="测试用例，数据库断言为空，不需要数据库断言", name="测试用例，数据库断言为空，不需要数据库断言")
                print('测试用例，数据库断言为空，不需要数据库断言')
        except Exception as error:
            logger.exception('数据库断言异常，请检查数据库连接是否成功')
            logger.exception(error)
            raise AssertionError